package JUC;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

// Executors工具类（线程工具类,就像数组有Arrays,集合有Collections）线程池三大方法,用来创建多线程
public class TestThreadPool {

    public static void main(String[] args) {
        ExecutorService service = Executors.newSingleThreadExecutor(); // 只有单个线程
        ExecutorService service1 = Executors.newFixedThreadPool(10);//固定线程，就是最多可以有10个线程同时执行
        ExecutorService service2 = Executors.newCachedThreadPool();// 缓存线程池，线程数量不固定，如果任务比较多就多开几个，少就少开几个（遇强则强，遇弱则弱）

        try{
            for (int i =0;i<20;i++){
                // execute()方法用来开启线程，传入Runnable对象，可以直接用lambda表达式重写run方法
                service1.execute(() -> {
                    System.out.println(Thread.currentThread().getName()+" 正在执行");
                });
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            // 程序执行完成后要关闭线程
            service.shutdown();
        }
    }
}
